<?xml version = '1.0' encoding = 'UTF-8'?>
<HBRRepo><variables><variable name="OQP_Scenario" type="member" usage="const" id="2" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Scenario</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_SCENARIO</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable><variable name="OQP_Territory" type="member" usage="const" id="1" product="Planning"><property name="application">SalesPln</property><property name="dimensionInputMode">type</property><property name="dimensionType">Territory</property><property name="prompt_text">LABEL_QTP_SLS_PLAN_PRMPT_TERRITORY</property><property name="scope">ruleset</property><property name="seeded">true</property><value/></variable></variables><rulesets/><rules><rule id="1" name="OQP_BottomUp Aggregation" product="Planning"><property name="application">SalesPln</property><property name="plantype">OEP_QTP</property><property name="seeded">true</property><variable_references><variable_reference name="OQP_Scenario" id="2"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_BottomUp Aggregation</property><property name="seq">1</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">OEP_Plan</property></variable_reference><variable_reference name="OQP_Territory" id="1"><property name="application">SalesPln</property><property name="hidden">true</property><property name="rule_name">OQP_BottomUp Aggregation</property><property name="seq">2</property><property name="type">3</property><property name="useAsOverrideValue">false</property><property name="validation_value">"OEP_Any Territory"</property></variable_reference></variable_references><script type="groovy">		/*RTPS:{OQP_Territory},{OQP_Scenario} */
      /*PURPOSE: This rule Aggregates Quota across all dimensions  */
		String Scenario=rtps.OQP_Scenario.member.name;		
		String entity = rtps.OQP_Territory.member.name;		
		List&lt;String> RowDimensions =[]
        List&lt;String> PrevDimensions =[]
        List&lt;String> AdditionalDimensions=[];
		List&lt;String> ColumnDimensions =[]
        List&lt;String> CustomDimensions=[]
        int iCnt;
        
        try
        {
            StringBuilder cscript = new StringBuilder();
            
            cscript.append('''SET AGGMISSG ON;\n''');
            cscript.append('''SET UPDATECALC OFF;\n''');
			Application app=operation.getApplication();
            Cube qtp=operation.getCube(); 
            List&lt;Dimension> dimList=app.getDimensions(qtp);
          	  dimList.each{
              	 if (it.hasUserVariable("OQP_UvPrd") || it.hasUserVariable("OQP_UvAccts")  )
               		{
						AdditionalDimensions.add(it.getName())
               		}
            	}
            
            /*START OF MAIN FIX*/           
            DataGrid currentGrid=operation.grid;
            String FixStmt=""
            /*Identify all cusotm dimensions under Pov of the grid then add them to Agg script*/
            List&lt;DataGrid.HeaderCell> hcells=currentGrid.getPov()
            hcells.each{
            String dimName = it.getDimName();
            DimensionType dType=it.getDimensionType();        
                if (dType==DimensionType.CUSTOM)
                {                
                 CustomDimensions.add(''''''+dimName+'''''')
                }
            }
            /*Identify all cusotm dimensions under Row of the grid then add them to Agg script*/
            List&lt;DataGrid.Row> hrow=currentGrid.getRows()
            hrow.each{
            List&lt;DataGrid.HeaderCell> hcell=it.getHeaders() 
            hcell.each{
            String dimName = it.getDimName();
            DimensionType dType=it.getDimensionType();
            if (!RowDimensions.contains(dimName))
            {	RowDimensions.add(dimName)
            if (dType==DimensionType.CUSTOM)
                {
                 CustomDimensions.add(''''''+dimName+'''''')
                }
            }
            }
            }
            /*Identify all cusotm dimensions under column of the grid then add them to Agg script*/
            List&lt;List&lt;DataGrid.HeaderCell>> cols = currentGrid.getColumns();
            for (List&lt;DataGrid.HeaderCell> cells : cols) 
            {		 
                for (DataGrid.HeaderCell cell : cells)  
                  {
                   String memName = cell.getDimName();
                   DimensionType dType=cell.getDimensionType();
                   if (!ColumnDimensions.contains(memName))
                   {
                    ColumnDimensions.add(memName)
                    if (dType==DimensionType.CUSTOM)
                        {
                           CustomDimensions.add('''"'''+memName+'''"''')
                        }
                    }   	
                   }				   
             }
             cscript.append('''FIX(''')
             if (app.getCurrencyMode()!=CurrencyMode.SINGLE_CURRENCY)
			  {
				String sCurrency =  operation.grid.pov.find { it.dimName == 'Currency' }.essbaseMbrName 
                cscript.append ('''"'''+ sCurrency +'''",''')
			  }
              
               /*Aggregate all other dimension for level zero members of Entity(Territory)*/
             cscript.append('''@Relative("YearTotal",0),&amp;OEP_CurYr,@Relative("OQP_Adjust Quota",0),"OEP_Working Bottom Up")\n''')
             if (CustomDimensions.size()>0)
             {
                if (CustomDimensions.size()>1)
                     {
                         cscript.append('''	FIX(@Relative("'''+entity+'''",0))\n''')
                        for (iCnt=0;iCnt&lt;CustomDimensions.size()-1;iCnt++)
                        {
                        cscript.append('''			FIX(@RELATIVE("'''+CustomDimensions[iCnt]+'''",0))\n''')              
                        }                
                        for (iCnt=CustomDimensions.size()-1;iCnt>0;iCnt--)
                        {
                        	if (PrevDimensions.size()>0)  
                        	{
                         		cscript.append('''			FIX('''+PrevDimensions.join(''',''')+''')\n''')
                         	}   
                        	cscript.append('''				AGG("'''+CustomDimensions[iCnt]+'''");\n''')                                                    
                            if (PrevDimensions.size()>0) 
                            {
                            	cscript.append('''			ENDFIX\n''')
                            }
                             if (!AdditionalDimensions.contains(CustomDimensions[iCnt]))
                                {
                                  PrevDimensions.add('''"OEP_Total '''+CustomDimensions[iCnt]+'''"''')
                                } 
                            
                        	cscript.append('''			ENDFIX\n''')
                        }
                        cscript.append('''			AGG("'''+CustomDimensions[0]+'''");\n''')
                       cscript.append('''	ENDFIX; \n''');
                    }
                    if (CustomDimensions.size()==1)
                    {
                       cscript.append('''	FIX(@Relative("'''+entity+'''",0))\n''')
                        cscript.append('''	 		AGG("'''+CustomDimensions[0]+'''");\n''')
                       cscript.append('''		ENDFIX\n''')            
                    }
             }		 	
              /*Aggregate Entity Dimension*/
             			 if (PrevDimensions.size()>0)  
                        	{                        
                        
                         		cscript.append('''			FIX('''+PrevDimensions.join(''',''')+''')\n''')
                         	}  
             				cscript.append('''	@IDESCENDENTS("'''+entity+'''");\n''')
              			 if (PrevDimensions.size()>0) 
                       		{
                            	cscript.append('''			ENDFIX\n''')
                            }
             cscript.append('''ENDFIX;\n''')
             println(cscript.toString()); 
             return cscript.toString();
		 }catch(all) {
				throw new HspRuntimeException('Error occured while executing business rule');
			}			 
		 
		</script></rule></rules><components/><deployobjects><deployobject product="2" application="salespln" plantype="oep_qtp" obj_id="1" obj_type="1" name="OQP_BOTTOMUP AGGREGATION"/></deployobjects></HBRRepo>